package ar.edu.utn.frsf.tpae.a2014.g01.controller.pedidos;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;

import ar.edu.utn.frsf.tpae.a2014.g01.PedidoService;
import ar.edu.utn.frsf.tpae.a2014.g01.UsuarioService;

import ar.edu.utn.frsf.tpae.a2014.g01.entidad.Cliente;
import ar.edu.utn.frsf.tpae.a2014.g01.entidad.Estado;
import ar.edu.utn.frsf.tpae.a2014.g01.entidad.Pedido;
import ar.edu.utn.frsf.tpae.a2014.g01.entidad.Transportista;

@ManagedBean(name="pedidoBean")
@SessionScoped
public class PedidoBean implements Serializable {

	private static final long serialVersionUID = -2412123115753615981L;

	@ManagedProperty(value="#{pedidoService}")
	PedidoService pedidoService;

	@ManagedProperty(value="#{usuarioService}")
	UsuarioService usuarioService;
	
	private Pedido pedido;
	private List <Pedido> pedidosEnCurso;
	private List <Pedido> historialPedidos;
	private List <Pedido> pedidosAceptados;
	private List<Pedido> pedidosTransportista ;
	private List <Transportista> transportistas;
	private int transportistaSeleccionado;
	private Estado estadoNuevo;
	

	@PostConstruct
	public void init() {

	}
	
	public String mostrarPedidosAceptados(){
		pedidosAceptados = pedidoService.buscarPedidos(Estado.ACEPTADO);
		return "MostrarAceptados";
	}
	public String mostrarCargarPedido(){
		pedido = new Pedido();
		return "CrearPedido";
	}
	public String consultarPedidos(){
		pedidosEnCurso = new ArrayList <Pedido>();
		historialPedidos = new ArrayList <Pedido>();
		List <Pedido> auxPedidos = pedidoService.buscarPedidosRealizados((Cliente) UsuarioBean.getUsuarioLogueado()); 
		for(Pedido aux: auxPedidos){
			if(aux.getEstado().equals("Entregado")){
				historialPedidos.add(aux);
			}
			else
				pedidosEnCurso.add(aux);
				
		}
		return "ConsultarPedidos";
	}
	public String principalAdministrador(){
		pedidosAceptados = pedidoService.buscarPedidos(Estado.ACEPTADO);
		return "PrincipalAdministrador";
	}
	
	public String principalTransportista(){
		return "PrincipalTransportista";
	}
	
	public String pedidosTransportista(){
		pedidosTransportista = pedidoService.buscarPedidosAsignados((Transportista) UsuarioBean.getUsuarioLogueado());
		return "PedidosAsignados";
	}

	public String crearPedido(){
		pedido.setCliente((Cliente) UsuarioBean.getUsuarioLogueado());
		pedidoService.crearPedido(pedido);
		pedido = new Pedido();
		init();
		return "PrincipalCliente";
	}
	public String principalCliente(){
		return "PrincipalCliente";
	}
	public String mostrarAsignarTransportista(){
		transportistas = usuarioService.buscarTransportistas();
		return "AsignarTransportista";
	}
	public String asignarTransportista(){
		Transportista tranSeleccionado=null;
		for(Transportista trans : transportistas){
			if(trans.getId()==transportistaSeleccionado)
				tranSeleccionado=trans;
		}
		pedidoService.asignarPedidoaTransportista(pedido, tranSeleccionado, new Date(), "");
		pedidosAceptados = pedidoService.buscarPedidos(Estado.ACEPTADO);
		return "MostrarAceptados";
	}
	
	public PedidoService getPedidoService() {
		return pedidoService;
	}
	public void setPedidoService(PedidoService service) {
		this.pedidoService = service;
	}
	
	public UsuarioService getUsuarioService() {
		return usuarioService;
	}
	public void setUsuarioService(UsuarioService service) {
		this.usuarioService = service;
	}

	public Pedido getPedido(){
		return pedido;
	}
	public List <Pedido> getPedidosEnCurso(){
		return pedidosEnCurso;
	}
	public List <Pedido> getHistorialPedidos(){
		return historialPedidos;
	}
	public List <Pedido> getPedidosAceptados(){
		return pedidosAceptados;
	}
	public void setPedido(Pedido pedido){
		this.pedido=pedido;
	}
	
	public List <Transportista> getTransportistas(){
		return transportistas;
	}
	
	public void setTransportistaSeleccionado(int id){
		this.transportistaSeleccionado = id;
	}
	
	public int getTransportistaSeleccionado() {
		return transportistaSeleccionado;
	}

	public List<Pedido> getPedidosTransportista() {
		return pedidosTransportista;
	}

	public void setPedidosTransportista(List<Pedido> pedidosTransportista) {
		this.pedidosTransportista = pedidosTransportista;
	}
	
	public String mostrarActualizarEstadoPedido(){
		estadoNuevo=null;
		return "ActualizarEstadoPedido";
	}
	
	public String actualizarEstadoPedido(){
		pedidoService.actualizarEstadoOrden(pedido, estadoNuevo, new Date(), "");
		pedidosTransportista = pedidoService.buscarPedidosAsignados((Transportista) UsuarioBean.getUsuarioLogueado());
		return "PedidosAsignados";
	}
	
	
	public boolean enTransporteDeshabilitado(){
		return pedido.getEstado().equals("En transporte");
	}

	public Estado getEstadoNuevo() {
		return estadoNuevo;
	}

	public void setEstadoNuevo(Estado estadoNuevo) {
		this.estadoNuevo = estadoNuevo;
	}
}
